package com.mazaiting.util.file;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.function.Predicate;

/**
 * 文件操作工具类
 */
public class FileUtil {

    /**
     * 递归文件
     *
     * @param dir 文件夹
     * @return 文件列表
     */
    public static List<File> listFiles(File dir) {
        // 文件列表
        final List<File> fileList = new ArrayList<>();
        // 判断当前文件是否存在
        if (!dir.exists() || !dir.isDirectory()) {
            return fileList;
        }
        // 当前目录下的所有文件夹及文件
        File[] files = dir.listFiles();
        // 判断文件列表是否为空
        if (Objects.isNull(files) || files.length == 0) {
            return fileList;
        }
        // 串行流遍历
        Arrays.stream(files)
                .forEach(file -> {
                    // 判断是否为路径, 如果是路径, 则递归调用
                    if (file.isDirectory()) {
                        // 添加遍历出的所有文件
                        fileList.addAll(listFiles(file));
                    } else {
                        // 文件
                        fileList.add(file);
                    }
                });
        return fileList;
    }


}